home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 November / Macworld (1999-11).dmg / Updaters / WhiteCap 3.0.4 / WhiteCap Source.sit / WhiteCap Source / Common / General Tools / Printable.cpp < prev    next >
C/C++ Source or Header  |  1999-07-19  |  4KB  |  241 lines

  1. #include "Printable.h"
  2.  
  3.  
  4. #include "EgOSUtils.h"
  5.  
  6. #ifdef EG_ZINC
  7. #include <Z_print.hpp>
  8. #endif
  9.  
  10.  
  11.  
  12.  
  13. ZafPrinter*        Printable::sZafPrinter     = NULL;
  14. bool            Printable::sJobIsSetup    = false;
  15. char            Printable::sJobRecord[500];
  16.  
  17.  
  18.  
  19. #ifdef EG_ZINC
  20.  
  21. void* Printable::GetPrintDevice() {
  22.     
  23.     AssertInit();
  24.     
  25.     return sZafPrinter -> DisplayContext();
  26. }
  27.  
  28.  
  29.  
  30. void Printable::InitJobStruct( void* inJobPtr, long inNumPages ) {
  31.     ZafPrintJobStruct*    job = (ZafPrintJobStruct*) inJobPtr;
  32.  
  33.     job -> collate        = false;
  34.     job -> copies        = 1;
  35.     job -> maxPage        = inNumPages;
  36.     job -> startPage    = 1;
  37.     job -> endPage        = job -> maxPage;
  38.     job -> minPage        = 1;
  39. }
  40.  
  41.  
  42. bool Printable::Print( char* inJobName, int inOption ) {
  43.     ZafPrintJobStruct    job;
  44.     ZafPrintJobStruct*    defJob = (ZafPrintJobStruct*) sJobRecord;
  45.     int                    curCopy, curPage;
  46.     bool                ok = false;
  47.     
  48.     AssertInit();
  49.         
  50.     curPage = GetNumPages();
  51.  
  52.     if ( inOption == 1 && ! sJobIsSetup )
  53.         inOption = 0;
  54.         
  55.     switch ( inOption ) {
  56.     
  57.         case 0:                            // Std print    (print setup dialog)
  58.             InitJobStruct( defJob, curPage );    
  59.             ok = JobSetup();
  60.             if ( ok ) 
  61.                 job    = *defJob;
  62.             break;
  63.                                         // Def Print    (uses most recent record from JobSetup() )
  64.         case 1:
  65.             ok = sJobIsSetup;
  66.             if ( ok ) 
  67.                 job    = *defJob;
  68.             break;
  69.  
  70.         case 2:                            // Print One     (no print setup and just print one)
  71.             InitJobStruct( &job, curPage );
  72.             ok = true;
  73.             break;
  74.     }
  75.     
  76.     if ( ok ) {
  77.         if ( sZafPrinter -> BeginJob( inJobName ) == ZAF_ERROR_NONE ) {
  78.     
  79.             SetPrintDevice( (void*) sZafPrinter -> DisplayContext() );
  80.             
  81.             if ( job.collate ) {
  82.                 for ( curCopy = 0; curCopy < job.copies; curCopy++ ) {
  83.                     for ( curPage = job.startPage; curPage <= job.endPage; curPage++ ) {
  84.                         sZafPrinter -> BeginPage();
  85.                         DrawPage( curPage, 0, 0 );
  86.                         sZafPrinter -> EndPage();
  87.                     }
  88.                 } }
  89.             else {
  90.                 for ( curPage = job.startPage; curPage <= job.endPage; curPage++ ) {
  91.                     for ( curCopy = 0; curCopy < job.copies; curCopy++ ) {
  92.                         sZafPrinter -> BeginPage();
  93.                         DrawPage( curPage, 0, 0 );
  94.                         sZafPrinter -> EndPage();
  95.                     }
  96.                 }
  97.             }
  98.             sZafPrinter -> EndJob(); }
  99.         else
  100.             ok = false;
  101.     }
  102.     
  103.     return ok;
  104. }
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111. bool Printable::PageSetup() {
  112.  
  113.     AssertInit();
  114.     sZafPrinter -> PrintSetup();
  115. }
  116.  
  117. #endif
  118.  
  119.  
  120.  
  121.  
  122. #ifdef EG_MAC
  123.  
  124. #include "CEgPrintout.h"
  125. #include "UPrintingMgr.h"
  126.  
  127.  
  128. bool Printable::Print( char* inJobName, int inOption ) {
  129.     THPrint        printRec;
  130.     
  131.     if (inOption !=2)
  132.         printRec = UPrintingMgr::GetDefaultPrintRecord();
  133.     
  134.     else printRec = UPrintingMgr::CreatePrintRecord();
  135.     
  136.     if ( printRec ) {
  137.         CEgPrintout theJob( printRec );                            // Set the current print record from this doc
  138.         theJob.DoJob( this, inJobName );                        // Print the exam image part
  139.         
  140.     }
  141.     return true;
  142. }
  143.  
  144.  
  145. #endif
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153. #ifdef EG_MAC
  154. #include <UPrintingMgr.h>
  155. #endif
  156.  
  157.  
  158.  
  159. void Printable::GetPagePointSize( long& outWidth, long& outHeight ) {
  160.     outWidth    = 0;
  161.     outHeight    = 0;
  162.  
  163.     #ifdef EG_MAC
  164.     THPrint        printRec    = UPrintingMgr::GetDefaultPrintRecord();
  165.     Rect         paperRect;
  166.     
  167.     if ( printRec ) {
  168.         paperRect        = (**printRec).rPaper;
  169.         
  170.         outWidth        = paperRect.right - paperRect.left;
  171.         outHeight        = paperRect.bottom - paperRect.top; 
  172.     }
  173.     #endif
  174.     
  175.     
  176.     #ifdef EG_ZINC
  177.     outWidth     = ( EgOSUtils::sXdpi * sZafPrinter -> PaperWidth() ) / sZafPrinter -> pixelsPerInchX;
  178.     outHeight     = ( EgOSUtils::sYdpi * sZafPrinter -> PaperHeight() ) / sZafPrinter -> pixelsPerInchY;
  179.     #endif
  180. }
  181.  
  182.  
  183.  
  184.  
  185.  
  186. void Printable::CloseOutputPort() {
  187.  
  188. }
  189.  
  190.  
  191.  
  192. void Printable::AssertInit() {
  193.  
  194.     #ifdef EG_ZINC
  195.     if ( ! sZafPrinter ) {
  196.         sZafPrinter = new ZafPrinter;
  197.         sZafPrinter -> SetMargins( 0, 0, 0, 0 );
  198.         InitJobStruct( (ZafPrintJobStruct*) sJobRecord, 1 );
  199.     }
  200.     #endif
  201.  
  202. }
  203.  
  204.  
  205.  
  206. void Printable::Shutdown() {
  207.  
  208.     #ifdef EG_ZINC
  209.     if ( sZafPrinter ) {
  210.         delete sZafPrinter;
  211.         sZafPrinter = NULL;
  212.     }
  213.     #endif
  214. }
  215.  
  216.  
  217.  
  218.  
  219. bool Printable::JobSetup() {
  220.  
  221.     #ifdef EG_ZINC
  222.     AssertInit();
  223.     ZafPrintJobStruct* job = (ZafPrintJobStruct*) sJobRecord;
  224.     sJobIsSetup = sZafPrinter -> JobSetup( *job );
  225.     #endif
  226.  
  227.     
  228.     // *** Implement mac code
  229.     
  230.     return sJobIsSetup;
  231. }
  232.  
  233.  
  234.  
  235. void Printable::SetPrintDevice( void* inDevice ) {
  236.     mCurPrintDevice = inDevice;
  237. }
  238.  
  239.  
  240.  
  241.